#pragma once

#include "Instruction.h"
#include "Value.h"
#include <string>

class LoadInstruction : public Instruction {
public:
    LoadInstruction(Function * func, Value * result, Value * ptr);

    Value * getPtr() const
    {
        return ptr_;
    }
    Value * getResult() const
    {
        return result_;
    }

    // 转为字符串
    void toString(std::string & str) override;

    // // 重载：返回被定义的变量名（字符串类型，匹配基类）
    // std::vector<std::string> getDefVars() override;

    // // 重载：返回被使用的变量名（字符串类型，匹配基类）
    // std::vector<std::string> getUseVars() override;

    // // 新增：返回被定义的变量（即load结果）
    // std::vector<Value *> getDefValues() const
    // {
    //     return {result_};
    // }

    // // 新增：返回被使用的变量（即被加载的指针）
    // std::vector<Value *> getUseValues() const
    // {
    //     return {ptr_};
    // }

private:
    Value * ptr_;    // 要加载的指针
    Value * result_; // 加载结果
};